////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2017-2018 Qualcomm Technologies, Inc.
// All Rights Reserved.
// Confidential and Proprietary - Qualcomm Technologies, Inc.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// THIS IS AUTO-GENERATED CODE.  PLEASE DO NOT EDIT (File bug reports against tools).
///
/// Auto-generated by: ParameterParser V1.1.4
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @file  afbafelements.h
/// @brief Auto-generated Chromatix parameter file
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#ifndef AFBAFELEMENTS_H
#define AFBAFELEMENTS_H

#include "parametermodule.h"
#include "parameterfilesymboltable.h"
#include "parametertypes.h"
#include "afglobalelements.h"

#define AFBAFELEMENTS_NAMESPACE_BEGIN namespace afbafelements {
#define AFBAFELEMENTS_NAMESPACE_END }

AFBAFELEMENTS_NAMESPACE_BEGIN

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// chromatixTouchROISettingsType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct chromatixTouchROISettingsType
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// touchScalingFactorNormalLight
    ///
    /// Description:   Factor by how much we will reduce the touch AF ROI in addition to the normal ROI in normal light. NOTE:
    ///                For Touch the ROI is scaled down based on the ROI calculated in normal light For example: if ROI_width =
    ///                400, ROI_height= 300 and touch_scaling_factor_normal_light = 0.75 then the Touch ROI width size is 400 *
    ///                0.75 = 300 pixelsthen the Touch ROI height size is 300 * 0.75 = 225 pixels.
    /// Range:         [0,1]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT touchScalingFactorNormalLight;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// touchScalingFactorLowLight
    ///
    /// Description:   Factor by how much we will reduce the touch AF ROI in addition to the normal ROI in low light. NOTE: For
    ///                Touch the ROI is scaled down based on the ROI calculated in low light For example: if ROI_width = 400,
    ///                ROI_height= 300 and touch_scaling_factor_lowlight_light = 1.0 then the Touch ROI width size is 400 * 1 =
    ///                400 pixels then the Touch ROI height size is 300 * 1 = 300 pixels.
    /// Range:         [0,1]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT touchScalingFactorLowLight;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// chromatixBAFScalerSettings
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct chromatixBAFScalerSettings
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// scalerEnable
    ///
    /// Description:   Scaler enable for this filter.
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    afglobalelements::enable_flag_type scalerEnable;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// MNScalerMval
    ///
    /// Description:   Scaler factor for numerator.
    /// Range:         [1,unbounded]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    INT32            MNScalerMval;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// MNScalerNval
    ///
    /// Description:   Scaler factor for denominator, M/N is the scaler factor, maximum 8/1.
    /// Range:         [1,unbounded]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    INT32            MNScalerNval;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// chromatixBAFFIRType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct chromatixBAFFIRType
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// FIREnable
    ///
    /// Description:   Enable/disable FIR filter.
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    afglobalelements::enable_flag_type FIREnable;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// coefficients - Array
    ///
    /// Description:   1 x 13 FIR filter 6s for coefficients. Constraints: None.
    /// Range:         [0,32]
    /// Length:        13
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT            coefficients[13];
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// chromatixBAFIIRType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct chromatixBAFIIRType
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// IIREnable
    ///
    /// Description:   Enable/disable IIR filter.
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    afglobalelements::enable_flag_type IIREnable;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// coefficients - Array
    ///
    /// Description:   10 coefficients for IIR, float, b10, b11, b12, -a11, -a12, b20, b21, b22, -a21, -a22, Constraints: Each
    ///                light level has different IIR configuration. Refer to the default values for IIR filters from the tuning
    ///                guideline under BAF settings.
    /// Range:         [0,4]
    /// Length:        10
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT            coefficients[10];
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// chromatixBAFHVFilterSettingsType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct chromatixBAFHVFilterSettingsType
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// IIR
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    chromatixBAFIIRType IIR;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// FIR
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    chromatixBAFFIRType FIR;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// nFilterShiftBits
    ///
    /// Description:   4s, shift between FIR and IIR. The bit_shift would change based on the chipset. Refer to the default
    ///                values for bit_shift from the tuning guideline under BAF settings.
    /// Range:         [-8,7]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    INT32               nFilterShiftBits;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// chromatixBAFCoringType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct chromatixBAFCoringType
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// coringEnable
    ///
    /// Description:   Flag to enable/disable BAF coring.
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    afglobalelements::enable_flag_type coringEnable;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// LUT - Array
    ///
    /// Description:   Coring table indices, range [0, 1, ..., 16]. Constraints: None.
    /// Range:         [0,16]
    /// Length:        17
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    INT32            LUT[17];

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// coringThreshold
    ///
    /// Description:   Coring threshold value. Default value: Refer to the default values for IIR filters from the tuning
    ///                guideline under BAF settings. Constraints: Each light level has different coring thresholds.
    /// Range:         [0,0x1FFFF]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    INT32            coringThreshold;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// coringGain
    ///
    /// Description:   Coring gain value.
    /// Range:         [0,0x3FF]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    INT32            coringGain;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// chromatixBAFPresetEnumType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
enum class chromatixBAFPresetEnumType
{
    AF_TUNING_CUSTOM     = 0,
    AF_TUNING_PRESET_0   = 1,
    AF_TUNING_PRESET_1   = 2,
    AF_TUNING_PRESET_2   = 3,
    AF_TUNING_PRESET_3   = 4,
    AF_TUNING_PRESET_4   = 5,
    AF_TUNING_PRESET_5   = 6,
    AF_TUNING_PRESET_MAX = 7
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// chromatixBAFilterSettingsType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct chromatixBAFilterSettingsType
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// presetID
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    chromatixBAFPresetEnumType       presetID;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// coring
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    chromatixBAFCoringType           coring;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// filterCustom
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    chromatixBAFHVFilterSettingsType filterCustom;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// chromatixBAFFilterType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct chromatixBAFFilterType
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// HVFilter - Array
    /// Length:        2
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    chromatixBAFilterSettingsType HVFilter[2];

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// scaler
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    chromatixBAFScalerSettings    scaler;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// chromatixBAFChannelSettings
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct chromatixBAFChannelSettings
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// ChannelSelect
    ///
    /// Description:   If value is set as 0 then G channel would be selected, if the value is 1 the Y channel would be selected.
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    afglobalelements::enable_flag_type ChannelSelect;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// gbgrChannelSelect
    ///
    /// Description:   If ch_sel is set as 0 then the flag g_sel would be valid, where g_sel = 0 would pick GR pixel while g_sel
    ///                = 1 would pick GB pixel.
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    afglobalelements::enable_flag_type gbgrChannelSelect;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// yConversionEnable
    ///
    /// Description:   Not used for now.
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    afglobalelements::enable_flag_type yConversionEnable;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// RGBToYCoefficients - Array
    ///
    /// Description:   If the value set for ch_sel as 1, then RGBToYCoefficients has to be configured. That is Y component will
    ///                be used to compute FV If the value set for ch_sel as 0 then G component will be used the values set in
    ///                RGBToYCoefficients[] wont take effect.
    /// Range:         [0,1]
    /// Length:        3
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT            RGBToYCoefficients[3];
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// chromatixBAFGammaType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct chromatixBAFGammaType
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// channelSettings
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    chromatixBAFChannelSettings channelSettings;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// gammaEnable
    ///
    /// Description:   Enable this flag if we want to use the gamma looks up table.
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    afglobalelements::enable_flag_type            gammaEnable;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// gammaLUT - Array
    ///
    /// Description:   Gamma LUT for R/{Gr,Gb}/B channels. Default value: [0, 3390, 4646, 5586, 6367, 7047, 7655, 8211, 8725,
    ///                9205, 9656, 10084, 10491, 10879, 11252, 11610, 11956, 12290, 12614, 12927, 13232, 13529, 13818, 14100,
    ///                14376, 14645, 14908, 15166, 15419, 15667, 15910, 16149]. Constraints: This gamma table represents the
    ///                1/2.2 gamma curve.
    /// Range:         [0,0x7FFFFFFF]
    /// Length:        32
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    INT32                       gammaLUT[32];
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// chromatixBAFGammaParamType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct chromatixBAFGammaParamType
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// presetID
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    chromatixBAFPresetEnumType presetID;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// gammaCustom
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    chromatixBAFGammaType      gammaCustom;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// chromatixBAFROISettingsType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct chromatixBAFROISettingsType
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// flag
    ///
    /// Description:   Flag to indicate whether the ROI is primary or secondary.
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    afglobalelements::enable_flag_type flag;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// startXOffset
    ///
    /// Description:   Start location x of a ROI. Range is [64+12, Width-12-w].
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT            startXOffset;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// startYOffset
    ///
    /// Description:   Start location y of a ROI. Range is [32+4, Width-4-h].
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT            startYOffset;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// widthRatio
    ///
    /// Description:   ROI width. Range is [0..Width/2].
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT            widthRatio;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// heightRatio
    ///
    /// Description:   ROI height, Range is [0..Height/2].
    /// Range:         [0,unbounded]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT            heightRatio;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// chromatixBAFROIPatternEnumType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
enum class chromatixBAFROIPatternEnumType
{
    BAF_ROI_PATTERN_CUSTOM  = 0,
    BAF_ROI_PATTERN_RECT    = 1,
    BAF_ROI_PATTERN_CROSS   = 2,
    BAF_ROI_PATTERN_DIAMOND = 3,
    BAF_ROI_PATTERN_SPARSE  = 4,
    BAF_ROI_PATTERN_MAX     = 5
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// chromatixBAFROIParamsType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct chromatixBAFROIParamsType
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// presetID
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    chromatixBAFROIPatternEnumType presetID;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// widthRatio
    ///
    /// Description:   ROI width ratio with repect to CAMIF width
    /// Range:         [0,1]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT                          widthRatio;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// heightRatio
    ///
    /// Description:   ROI height ratio with repect to CAMIF height
    /// Range:         [0,1]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT                          heightRatio;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// gridSizeH
    ///
    /// Description:   ROI grid width ratio with respect to ROI width.
    /// Range:         [0,1]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT                          gridSizeH;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// gridSizeV
    ///
    /// Description:   ROI grid height ratio with respect to ROI height.
    /// Range:         [0,1]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT                          gridSizeV;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// gridGapH
    ///
    /// Description:   ROI grid gap width ratio with respect to ROI width.
    /// Range:         [0,1]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT                          gridGapH;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// gridGapV
    ///
    /// Description:   ROI grid gap width ratio with respect to ROI height.
    /// Range:         [0,1]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT                          gridGapV;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// numROI
    ///
    /// Description:   Number of ROI used in custom ROI configuration.
    /// Range:         [0,181]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    INT32                          numROI;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// ROICustom - Array
    /// Min Length:    1
    /// Max Length:    181
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32                         ROICustomCount;
    UINT32                         ROICustomID;
    chromatixBAFROISettingsType*   ROICustom;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// chromatixBAFSetType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct chromatixBAFSetType
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// BAFID
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    enum class BAFIDEnum
    {
        BAFIDDefault   = 0,
        BAFIDLowLight  = 1,
        BAFIDFace      = 2,
        BAFIDSpotLight = 3
    } BAFID;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// ROIConfig - Array
    /// Length:        4
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    chromatixBAFROIParamsType     ROIConfig[4];

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// gamma - Array
    /// Length:        4
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    chromatixBAFGammaParamType    gamma[4];

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// filter - Array
    /// Length:        4
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    chromatixBAFFilterType        filter[4];

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// touchROI
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    chromatixTouchROISettingsType touchROI;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// chromatixBAFSetsType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct chromatixBAFSetsType
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// elements
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    chromatixBAFSetType elements;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// chromatixBAFType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct chromatixBAFType
{
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Binary file symbol table entry ID
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32 SymbolTableID;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// module_version
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    struct module_versionStruct
    {
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// Binary file symbol table entry ID
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 SymbolTableID;
        INT32 major_revision;
        INT32 minor_revision;
    } module_version;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// parameter_version
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    struct parameter_versionStruct
    {
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// Binary file symbol table entry ID
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 SymbolTableID;
        INT32 major_revision;
        INT32 minor_revision;
    } parameter_version;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// sets
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    chromatixBAFSetsType sets;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// chromatixBAFTypeClass
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class chromatixBAFTypeClass : public ParameterModule, public chromatixBAFType
{
public:
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Version
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static const UINT16 MAJOR = 3;
    static const UINT16 MINOR = 4;
    static const UINT32 PATCH = 0;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Default Constructor
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    chromatixBAFTypeClass(
        const CHAR* name);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Constructor
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    chromatixBAFTypeClass(
        const CHAR* name,
        UINT32 modeId,
        UINT16 mode,
        UINT16 subMode,
        UINT32 group);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Destructor
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    virtual ~chromatixBAFTypeClass();

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// GetName
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static const CHAR* GetName(
        const CHAR* type);


    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load chromatixTouchROISettingsType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadchromatixTouchROISettingsType(
        ParameterFileSymbolTableEntry* entry,
        chromatixTouchROISettingsType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load chromatixBAFScalerSettings
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadchromatixBAFScalerSettings(
        ParameterFileSymbolTableEntry* entry,
        chromatixBAFScalerSettings* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load chromatixBAFFIRType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadchromatixBAFFIRType(
        ParameterFileSymbolTableEntry* entry,
        chromatixBAFFIRType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load chromatixBAFIIRType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadchromatixBAFIIRType(
        ParameterFileSymbolTableEntry* entry,
        chromatixBAFIIRType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load chromatixBAFHVFilterSettingsType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadchromatixBAFHVFilterSettingsType(
        ParameterFileSymbolTableEntry* entry,
        chromatixBAFHVFilterSettingsType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load chromatixBAFCoringType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadchromatixBAFCoringType(
        ParameterFileSymbolTableEntry* entry,
        chromatixBAFCoringType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load chromatixBAFilterSettingsType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadchromatixBAFilterSettingsType(
        ParameterFileSymbolTableEntry* entry,
        chromatixBAFilterSettingsType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load chromatixBAFFilterType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadchromatixBAFFilterType(
        ParameterFileSymbolTableEntry* entry,
        chromatixBAFFilterType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load chromatixBAFChannelSettings
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadchromatixBAFChannelSettings(
        ParameterFileSymbolTableEntry* entry,
        chromatixBAFChannelSettings* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load chromatixBAFGammaType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadchromatixBAFGammaType(
        ParameterFileSymbolTableEntry* entry,
        chromatixBAFGammaType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load chromatixBAFGammaParamType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadchromatixBAFGammaParamType(
        ParameterFileSymbolTableEntry* entry,
        chromatixBAFGammaParamType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load chromatixBAFROISettingsType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadchromatixBAFROISettingsType(
        ParameterFileSymbolTableEntry* entry,
        chromatixBAFROISettingsType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load chromatixBAFROIParamsType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadchromatixBAFROIParamsType(
        ParameterFileSymbolTableEntry* entry,
        chromatixBAFROIParamsType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load chromatixBAFSetType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadchromatixBAFSetType(
        ParameterFileSymbolTableEntry* entry,
        chromatixBAFSetType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load chromatixBAFSetsType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadchromatixBAFSetsType(
        ParameterFileSymbolTableEntry* entry,
        chromatixBAFSetsType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load chromatixBAFType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadchromatixBAFType(
        ParameterFileSymbolTableEntry* entry,
        chromatixBAFType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load module_versionStruct
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadmodule_versionStruct(
        ParameterFileSymbolTableEntry* entry,
        chromatixBAFType::module_versionStruct* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load parameter_versionStruct
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadparameter_versionStruct(
        ParameterFileSymbolTableEntry* entry,
        chromatixBAFType::parameter_versionStruct* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Unload chromatixBAFROIParamsType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static void UnloadchromatixBAFROIParamsType(
        chromatixBAFROIParamsType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Unload chromatixBAFSetType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static void UnloadchromatixBAFSetType(
        chromatixBAFSetType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Unload chromatixBAFSetsType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static void UnloadchromatixBAFSetsType(
        chromatixBAFSetsType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Unload chromatixBAFType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static void UnloadchromatixBAFType(
        chromatixBAFType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Parse symbol table entry, and return a new object
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    virtual ParameterModule* Parse(
        ParameterSetManager* manager,
        ParameterFileSymbolTableEntry* entry) const;

}; // End class chromatixBAFTypeClass

AFBAFELEMENTS_NAMESPACE_END
#endif // AFBAFELEMENTS_H

